package org.convallaria.system.biz.util;

import cn.hutool.core.text.CharSequenceUtil;
import org.convallaria.system.biz.entity.SysUser;
import org.convallaria.system.biz.exception.UserBusinessException;
import org.convallaria.system.biz.service.sys.SysUserService;

/**
 * 用户验证工具类
 * 
 * @author convallaria
 * @since 1.0.0
 */
public class UserValidationUtil {
    
    /**
     * 验证用户唯一性
     * 
     * @param userService 用户服务
     * @param email 邮箱
     * @param phoneNumber 手机号
     * @param userId 用户ID（更新时排除自己）
     * @param tenantId 租户ID
     */
    public static void validateUserUniqueness(SysUserService userService, 
                                            String email, 
                                            String phoneNumber, 
                                            Long userId, 
                                            Long tenantId) {
        // 检查邮箱唯一性
        if (CharSequenceUtil.isNotBlank(email) && 
            !userService.isEmailUnique(email, userId, tenantId)) {
            throw new UserBusinessException("EMAIL_EXISTS", "邮箱已存在");
        }
        
        // 检查手机号唯一性
        if (CharSequenceUtil.isNotBlank(phoneNumber) && 
            !userService.isPhoneNumberUnique(phoneNumber, userId, tenantId)) {
            throw new UserBusinessException("PHONE_EXISTS", "手机号已存在");
        }
    }
    
    /**
     * 验证用户名唯一性
     * 
     * @param userService 用户服务
     * @param username 用户名
     * @param userId 用户ID（更新时排除自己）
     * @param tenantId 租户ID
     */
    public static void validateUsernameUniqueness(SysUserService userService, 
                                                String username, 
                                                Long userId, 
                                                Long tenantId) {
        if (!userService.isUsernameUnique(username, userId, tenantId)) {
            throw new UserBusinessException("USERNAME_EXISTS", "用户名已存在");
        }
    }
    
    /**
     * 验证密码确认
     * 
     * @param password 密码
     * @param confirmPassword 确认密码
     */
    public static void validatePasswordConfirmation(String password, String confirmPassword) {
        if (!password.equals(confirmPassword)) {
            throw new UserBusinessException("PASSWORD_MISMATCH", "两次输入的密码不一致");
        }
    }
    
    /**
     * 验证用户存在性
     * 
     * @param user 用户对象
     */
    public static void validateUserExists(SysUser user) {
        if (user == null) {
            throw new UserBusinessException("USER_NOT_FOUND", "用户不存在");
        }
    }
    
    /**
     * 验证不能删除当前用户
     * 
     * @param userIds 要删除的用户ID列表
     * @param currentUserId 当前用户ID
     */
    public static void validateNotDeleteCurrentUser(java.util.List<Long> userIds, Long currentUserId) {
        if (userIds.contains(currentUserId)) {
            throw new UserBusinessException("CANNOT_DELETE_SELF", "不能删除当前用户");
        }
    }
    
    /**
     * 验证文件类型
     * 
     * @param contentType 文件类型
     */
    public static void validateFileType(String contentType) {
        if (contentType == null || !contentType.startsWith("image/")) {
            throw new UserBusinessException("INVALID_FILE_TYPE", "只能上传图片文件");
        }
    }
    
    /**
     * 验证文件大小
     * 
     * @param fileSize 文件大小
     * @param maxSize 最大大小（字节）
     */
    public static void validateFileSize(long fileSize, long maxSize) {
        if (fileSize > maxSize) {
            throw new UserBusinessException("FILE_TOO_LARGE", "文件大小不能超过" + (maxSize / 1024 / 1024) + "MB");
        }
    }
}
